﻿using System;
using DATA.Base;
using DATA.BusinessObjects;
using DATA.ManagerObjects;
using System.Collections.Generic;
using NHibernate;

namespace BUS
{
    public class HoaDonBUS
    {
        #region Bình - thêm hoá đơn
        public static Boolean ThemHoaDon(Hoadon hd)
        {
            Boolean flag = false;
            ISession isession = NHibernateSessionManager.Instance.Session.GetISession();
            ITransaction iTrans = null;
            try
            {
                iTrans = isession.BeginTransaction();
                isession.Save(hd);
                iTrans.Commit();
                flag = true;
            }
            catch (Exception ex)
            {
                iTrans.Rollback();
                isession.Close();
                throw new Exception("Lỗi, không thêm được hoá đơn", ex);
            }
            return flag;
        }
        #endregion

        #region Bình - Lấy hoá đơn mới nhất
        public static Hoadon LayHoaDonMoiNhat()
        {
            Hoadon hd = null;

            IManagerFactory MF = new ManagerFactory();
            IHoadonManager HDM = MF.GetHoadonManager();

            String sql = "FROM Hoadon hd "
                        + "WHERE length(hd.Id) = (Select MAX(length(hd.Id)) "
                                                + "from Hoadon hd) "
                        + "ORDER BY hd.Id desc";

            IList<Hoadon> list = HDM.GetByQuery(sql);
            hd = list[0];

            return hd;
        }
        #endregion

        #region Bình - lập hoá đơn khi biết thông tin khách khàng và danh sách phiếu thuê phòng
        public static int LapHoaDon(Khachhang kh, List<Phieuthuephong> list)
        {
            int flag = 0;

            //thêm khách hàng
            if (KhachHangBUS.ThemKhachHang(kh))
                flag++;

            //thêm hoá đơn
            Hoadon hd = HoaDonBUS.LayHoaDonMoiNhat();
            int mhd_moinhat = int.Parse(kh.Id.Substring(3));
            hd = new Hoadon();
            hd.Id = "MHD" + (mhd_moinhat + 1).ToString();
            hd.Khachhang = kh;

            double trigia = 0;
            for (int i = 0; i < list.Count; i++)
            {
                int songaythue = Math.Abs(list[i].NgayThuePhong.Value.Subtract(list[i].NgayTraPhong.Value).Days);
                trigia += list[i].DonGiaThue.Value * songaythue;
            }
            hd.TriGiaHoaDon = (float)trigia;

            if (HoaDonBUS.ThemHoaDon(hd))
                flag++;

            //thêm chi tiết hoá đơn
            for (int i = 0; i < list.Count; i++)
            {
                Chitiethoadon cthd = ChiTietHoaDonBUS.LayChiTietHoaDonMoiNhat();
                int mcthd_moinhat = int.Parse(cthd.Id.Substring(5));
                cthd = new Chitiethoadon();
                cthd.Id = "MCTHD" + (mcthd_moinhat + 1).ToString();
                cthd.Hoadon = hd;
                cthd.Phieuthuephong = list[i];
                int songaythue = 0;
                songaythue = (int)Math.Abs(list[i].NgayThuePhong.Value.Subtract(list[i].NgayTraPhong.Value).Days);
                cthd.SoNgayThue = songaythue;
                cthd.ThanhTien = list[i].DonGiaThue * songaythue;

                if (ChiTietHoaDonBUS.Them(cthd) == false)
                    flag = 0;
                else
                {
                    //cập nhật tình trạng phòng
                    list[i].Phong.TinhTrangPhong = 0;
                    if(PhongBUS.CapNhatPhong(list[i].Phong) == false)
                        flag = 0;
                }
            }
            flag++;

            if (flag == 3)
            {
                return 1;
            }
            return 0;
        }
        #endregion
    }
}
